//选择器2016-08-16封装 支持多个表单同名
(function ($) {
	var isIE6= !!window.ActiveXObject && !window.XMLHttpRequest;//是否ie6

	/***截取字符串**/
	function sub_str(val,counts){
		return mSubstr(val,counts*2);
	}

	$.fn.extend({
		selectVar:{//全局常量
			focusId:'',//当前焦点菜单的id
			counts:0//统计菜单数
		},
		 /**
		 * 说明:构造函数
		 * settings:参数
		 */
		select:function (settings) {
			var setvar = {//外部设置变量
				index:0,//当前菜单在全局中的索引值
				defaults:0,//默认按索引选中null为不选
				defaultFill:[{"value": '', "text": "请选择"}],//当defaults为null时,填空使用这个
				optionData:Array(),//菜单选项数据
				selectWidth: '',//菜单按扭的宽
				selectHeight: '',//菜单按扭的高
				boxWidth: '',//下拉层的宽
				boxWidthAdjust: 0,//下拉层的宽
				boxHeight: 300,//下拉层的高
				css:'selectOptions',//下拉层的css
				offset:Array(0,0),//options偏移x.y
				selected:null,//默认选中值
				callback:function(val,text){},
				optionli:'auto',
				fixed: false//是否固定定位
			};//设置变量
			$.extend(setvar, settings);


			var event_tracking=0;//事件跟踪

			var mythis = this;
			mythis.selectVar.counts++;

			var oInput=mythis.attr('id');//表单的id
			var oForm='';//表单的上级form的id
			var selectObjects='';//select事件帮定对象
			var oCounts=mythis.selectVar.counts-1;//从0开始，上面已经++所以-1
			setvar.index=oCounts;
			if(mythis.next("#"+oInput+"_select").length>0){
				selectObjects=mythis.next("#"+oInput+"_select");
			}else if(mythis.parents("form").length>0){
				oForm=mythis.parents("form").attr('id');
				selectObjects=$("#"+oForm).find("#"+oInput+"_select");
			}else{
				selectObjects=$("#"+oInput+"_select");
			}//select按扭对像，有form时加上form为前缀

			var optionsId="select_options_"+oInput+'_'+oCounts;//菜单唯一id
			var optionData=setvar.optionData;
			mythis.attr("data-value",oCounts);//表单数据邦定对应id数据

			if(setvar.selectWidth!=''){//菜单设置了宽进行内部元素计算调整
				selectObjects.css({
					width:setvar.selectWidth
				});
				selectObjects.find("span").css({
					width:setvar.selectWidth-selectObjects.find("i").outerWidth(true )
				});
			}else{
				selectObjects.find("span").css({
					width:selectObjects.width()-selectObjects.find("i").outerWidth(true)
				});
			}
			if(setvar.selectHeight!=''){//菜单设置了高进行内部元素计算调整
				selectObjects.css({
					height:setvar.selectHeight
				});
				var ch=(setvar.selectHeight-selectObjects.find("span").outerHeight(true))/2;
				selectObjects.find("i").css({
					"margin-top":ch+13
				});
				selectObjects.find("span").css({
					"padding-top":ch
				});
			}


			selectObjects.hover(function(){//经过select设置经过菜单id
				mythis.selectVar.focusid=optionsId;
			},function(){
				mythis.selectVar.focusid='';
			});

			var si=false;
			if(setvar.selected!=null){//如果json有设置选择值直接进行选择项
				$.each(optionData,function(key,val){
					if(String(val.value)==String(setvar.selected)){
						selectObjects.find("span a").html(val.text);
						mythis.val(val.value);
						si=true;
					}
				});
			}else if(mythis.val()!=''){//如果隐常表单有值，按值来设置选择项
				$.each(optionData,function(key,val){
					if(String(val.value)==String(mythis.val())){
						selectObjects.find("span a").html(val.text);
						mythis.val(val.value);
						si=true;
					}
				});
			}else{//否则从json里查找选择项
				$.each(optionData,function(key,val){
					try
					{
						if(typeof(val.selected)!= "undefined" && val.selected==true){
							selectObjects.find("span a").html(val.text);
							mythis.val(val.value);
							si=true;
						}
					}
					catch(err){}
				});
			}
			if(si==false && optionData.length>0 && setvar.defaults!=null && optionData.length>0){//如果未设置将使用第一个
				selectObjects.find("span a").html(optionData[0].text);
				mythis.val(optionData[0].value)
			}else if((si==false && setvar.defaults==null) || optionData.length<=0){//defaults为null第一个值设为setvar.defaultFill
				selectObjects.find("span a").html(setvar.defaultFill[0].text);
				mythis.val(setvar.defaultFill[0].value)
			}
			//if( !selectObjects.data("events")["click"] ){
				 selectObjects.click(function(){//点击select
					 mythis.makeOptions();
				 });
			//}
			var optionsObjects=$("#"+optionsId);//菜单对象

			/**
			 * 生成菜单
			 */
			this.makeOptions=function(){
				mythis.selectVar.focusid=optionsId;
				var optionsObjects=$("#"+optionsId);//菜单对象
				var optionData=setvar.optionData;
				if(optionData.length>0){
					if (optionsObjects.length <= 0){//第一次点击的时候生成下拉
						var str_li='';var section_li='';
						$.each(optionData,function(key,val){
							try
							{
								if(typeof (val['section'])!= "undefined" && val['section']==true) {
									section_li = " class='section'";
								}else{
									section_li='';
								}
							}
							catch(err){}
							str_li+="<li"+section_li+" data-value='"+val['value']+"'><a>"+val['text']+"</a></li>";
						});
						var html="<div class='"+setvar.css+"' id='"+optionsId+"'><ul>"+str_li+"</ul></div>";
						$("body").append(html);
						optionsObjects=$("#"+optionsId);//第一次获取菜单对象

						if(setvar.boxWidth != ''){//重定宽
							optionsObjects.css({
								width:setvar.boxWidth
							});
							if(setvar.optionli=='auto') optionsObjects.find('li').css({width:setvar.boxWidth});
						}else{
							optionsObjects.css({
								"min-width":selectObjects.innerWidth()+setvar.boxWidthAdjust
							});
							if(setvar.optionli=='auto') optionsObjects.find('li').css({"min-width":selectObjects.innerWidth()+setvar.boxWidthAdjust});
						}

						if(optionsObjects.height() > setvar.boxHeight){//菜单高度大于310出现滚动条
							optionsObjects.css({'overflow-x':'hidden','overflow-y':'scroll','height':setvar.boxHeight});
						}

						var lisi=0;
						optionsObjects.find("li").each(function() {
							if (optionData[lisi]['section'] != true) {
								$(this).click(function () {
									selectObjects.find("i").removeClass('swap');
									mythis.val($(this).attr('data-value'));
									selectObjects.find("span a").html($(this).find("a").html());
									optionsObjects.hide();
									setvar.callback($(this).attr('data-value'),$(this).find("a").html());//回调一个方法
								});
								$(this).mouseover(function(){//经过变色或者说更换li的class
									optionsObjects.find("li").removeClass('selected');
									$(this).addClass('selected');
								});
							}
							lisi++;
						});
						//optionsObjects.find("li").mouseover(function(){//经过变色或者说更换li的class
						//optionsObjects.find("li").removeClass('selected');
						//$(this).addClass('selected');
						//});

						selectObjects.find("i").addClass('swap');//小图标切换

						mythis.againPosition(selectObjects,optionsId,setvar.fixed,setvar.offset);
						optionsObjects.show();

						$("#"+optionsId).hover(function(){//经过options设置经过菜单id
							mythis.selectVar.focusid=optionsId;
						},function(){
							mythis.selectVar.focusid='';
						});

						if(event_tracking==0){
							$(document).bind("click",function(){//点击其它地方隐常菜单
								if(optionsId!=mythis.selectVar.focusid && $("#"+optionsId).is(':visible')){
									selectObjects.find("i").removeClass('swap');
									$("#"+optionsId).hide();
								}
							});
							//窗口缩放滚动事件
							$(window).bind("resize",function(){
								if($("#"+optionsId).is(':visible')){
									mythis.againPosition(selectObjects, optionsId, setvar.fixed, setvar.offset);
								}
							});
						}
						event_tracking=1;
					}else{//已生成菜单的情况只做切换即可
						if(!optionsObjects.is(':hidden')) {//
							selectObjects.find("i").removeClass('swap');
							optionsObjects.hide();
						}else{
							selectObjects.find("i").addClass('swap');
							mythis.againPosition(selectObjects, optionsId, setvar.fixed, setvar.offset);
							optionsObjects.show();
						}
					}

					if(!optionsObjects.is(':hidden')) {//打开菜单时给选定项加效果
						optionsObjects.find("li").removeClass('selected');
						optionsObjects.find("li[data-value='"+mythis.val()+ "']").addClass('selected');
						//alert(mythis.val());
					}
				}else{//空菜单点击效果
					selectObjects.fadeTo("fast", 0.25, function(){
						selectObjects.fadeTo("fast", 1, function(){
							selectObjects.stop();
						});
					});
				}
			}
			/**
			 *说明：重新生成菜单
			 *data:选项数据 //由一个二维数组组成
			 */
			this.resetOptions=function(data){
				var optionsObjects=$("#"+optionsId);//菜单对象
				optionsObjects.remove();
				setvar.optionData=data;
				var optionData=setvar.optionData;
				var si=false;
				$.each(data,function(key,val){//设置默认值
					try
					{
						if(typeof (val.selected)!= "undefined" && val.selected==true){
							selectObjects.find("span a").html(val.text);
							mythis.val(val.value);
							si=true;
						}
					}
					catch(err){}
				});
				if(si==false && optionData.length>0 && setvar.defaults!=null && optionData.length>0){//如果未设置将使用第一个
					selectObjects.find("span a").html(optionData[0].text);
					mythis.val(optionData[0].value)
				}else if((si==false && setvar.defaults==null) || optionData.length<=0){//defaults为null第一个值设为setvar.defaultFill
					selectObjects.find("span a").html(setvar.defaultFill[0].text);
					mythis.val(setvar.defaultFill[0].value)
				}
				return false;
			}
			/**
			 * 重选值
			 */
			this.resetSelected=function(value){
				$.each(setvar.optionData,function(key,val){
					if(String(val.value)==String(value)){
						selectObjects.find("span a").html(val.text);
						mythis.val(val.value);
						return false;
					}
				});
			}
			/**
			 * 打开菜单
			 */
			this.optionsEvents=function(){
				this.makeOptions();
			}
			return this;
		},
		/**
		 *说明：Options坐标从定位
		 * reference:参考对象
		 * optionsId:对象id
		 * ofixed:是否固定定位
		 * offset:偏移坐标
		 */
		againPosition:function (referenceObjects,optionsId,ofixed,offset){
			if(ofixed==true && !isIE6)
			{
				var optionsTop=$(referenceObjects).offset().top-$(document).scrollTop()+$(referenceObjects).height()+1+offset[1];
				var optionsLeft=$(referenceObjects).offset().left-$(document).scrollLeft()+offset[0];
				if($(window).height()<(optionsTop+$("#"+optionsId).height())) {//判断窗口是否出线
					var optionsTop=optionsTop-$("#"+optionsId).height();
				}
				$('#'+optionsId).css({
					position:'fixed',
					top:optionsTop,
					left:optionsLeft
				});
			}else{
				var optionsTop=$(referenceObjects).offset().top+$(referenceObjects).height()+1+offset[1];
				//alert(optionsTop);
				var optionsLeft=$(referenceObjects).offset().left+offset[0];
				if($(window).height()<($(referenceObjects).offset().top-$(document).scrollTop()+$(referenceObjects).height()+1+offset[1]+$("#"+optionsId).height())) {//判断窗口是否出线
					var optionsTop=optionsTop-$("#"+optionsId).height()-$(referenceObjects).height()-2;
				}
				$('#'+optionsId).css({
					top:optionsTop,
					left:optionsLeft
				});
			}
		}
	});
})(jQuery);
/*** 使用方法
 var indextype = [
 {"value":0,"text":"全文"},
 {"value":1,"text":"职位"},
 {"value":2,"text":"公司"}
 ]


 var select1 = $("#index").select({
		data:indextype,//菜单选项数据
		css:'indexOptions',//下拉层的css
		selectWidth: '',//菜单按扭的宽
		selectHeight: '',//菜单按扭的高
		boxWidth: '',//下拉层的宽
		boxHeight: 300,//下拉层的高
		offset:Array(0,0),//options偏移x.y
		selected:null,//默认选中
		callback:function(val,text){},//选择后的动作
		fixed: false//是否固定定位
	});
 var indextype2 = {"option":[
        {"value":0,"text":"全文2"},
        {"value":1,"text":"职位2",selected:true},
        {"value":2,"text":"公司2"}
    ]}
 select1.resetOptions(indextype2);//菜单重新定义
 select1.resetSelected(2);//设置选定值
 **/